package com.zhiwang.planet.di.module

import androidx.lifecycle.LifecycleOwner
import com.zhiwang.planet.di.ActivityScope
import com.uber.autodispose.android.lifecycle.AndroidLifecycleScopeProvider
import dagger.Module
import dagger.Provides

/**
 * 方便在 Presenter 中也能用到 scope ，以便及时取消订阅避免内存泄漏（这里的泄漏主要是那些数据回调接口，因为　Activity　直接实现了　xxxView　，
 * 而　Presenter　中又保存了这些 xxxView 也就是 Activity 的引用，而 RxJava 又保存了 Presenter 的引用( subscribe 方法的匿名类保留了 Presenter 引用)，
 * 所以容易导致订阅没有去掉导致 Activity 无法回收）
 */
@Module
class AutoDisposeModule(private var lifecycleOwner: LifecycleOwner) {

    @ActivityScope
    @Provides
    fun provideAutodisposeScope(): AndroidLifecycleScopeProvider {
        return AndroidLifecycleScopeProvider.from(lifecycleOwner)
    }

    @ActivityScope
    @Provides
    fun provideLifecycle() = lifecycleOwner.lifecycle
}